/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package org.aruoc.sim;

import org.aruoc.sim.SimWorldPainter;
import org.aruoc.sim.SimWorld;
import java.awt.Graphics2D;
import net.phys2d.math.MathUtil;
import net.phys2d.math.Matrix2f;
import net.phys2d.math.Vector2f;
import net.phys2d.raw.Body;
import net.phys2d.raw.shapes.DynamicShape;
import net.phys2d.raw.shapes.Shape;

/**
 *
 * @mperezma
 */
public class SimContacto extends Body {

    public float friccionSuelo = 0f;

    public SimContacto(DynamicShape shape, float m, float friccion) {
        super(shape, m);
        friccionSuelo = friccion;
    }

    protected SimContacto(Shape shape, float m, float friccion) {
        super(shape, m);
        friccionSuelo = friccion;
    }

    public SimContacto(String name, DynamicShape shape, float m, float friccion) {
        super(name, shape, m);
        friccionSuelo = friccion;
    }

    protected SimContacto(String name, Shape shape, float m, float friccion) {
        super(name, shape, m);
        friccionSuelo = friccion;
    }

    public float getFriccionSuelo() {
        return friccionSuelo;
    }

    public void setFriccionSuelo(float friccionSuelo) {
        this.friccionSuelo = friccionSuelo;
    }

    public void step(SimWorld world) {
        Matrix2f giro180 = new Matrix2f((float) Math.PI);
        Vector2f rozamiento = MathUtil.mul(giro180, getVelocity());
        rozamiento.x = rozamiento.x * getMass() * getFriccionSuelo();
        rozamiento.y = rozamiento.y * getMass() * getFriccionSuelo();
        addForce(rozamiento);

        // TODO: calcular la fuerza de fricción para la velocidad angular
        adjustAngularVelocity(getAngularVelocity() * (-1) / 20);
    }
    
    public void paint(SimWorldPainter painter, Graphics2D g) {
        painter.drawBody(g, this);
    }

}
